package org.sky.algorithm.arrayList;

import java.util.Arrays;

/**
 * @author fog
 * @description ArrayList实现方法
 * @date 2021/7/20
 */

public class MyArray {

    private int[] elements;

    public MyArray() {
        elements = new int[0];
    }

    /**
     * @return int 类型
     * @description 获取数组大小
     * @author fog
     * @date 2021/7/21
     */
    public int size() {
        return elements.length;
    }

    /**
     * @description 打印数组
     * @author fog
     * @date 2021/7/21
     */
    public void show() {
        System.out.println(Arrays.toString(elements));
    }

    /**
     * @param element 目标元素
     * @description 添加元素，位置在最后一位
     * @author fog
     * @date 2021/7/21
     */
    public void add(int element) {

        int[] newArray = new int[elements.length + 1];

        //  System.arraycopy(elements, 0, newArray, 0, elements.length); // JDK 自带数组 Copy 方法

        for (int i = 0; i < elements.length; i++) {
            newArray[i] = elements[i];
        }

        newArray[elements.length] = element;

        elements = newArray;
    }

    /**
     * @param index   添加位置索引
     * @param element 目标元素
     * @description 添加元素到指定位置
     * @author fog
     * @date 2021/7/21
     */
    public void insert(int index, int element) {

        if (index > elements.length || index < 0) {
            throw new RuntimeException("下标越界");
        }

        int[] newArray = new int[elements.length + 1];

        for (int i = 0; i < elements.length; i++) {
            if (i < index) {
                newArray[i] = elements[i];
            } else {
                newArray[i + 1] = elements[i];
            }
        }

        newArray[index] = element;

        elements = newArray;
    }

    /**
     * @param index 指定位置
     * @description 删除指定位置元素
     * @author fog
     * @date 2021/7/21
     */
    public void delete(int index) {

        if (index > elements.length - 1 || index < 0) {
            throw new RuntimeException("下标越界");
        }

        int[] newArray = new int[elements.length - 1];

        for (int i = 0; i < newArray.length; i++) {
            if (i < index) {
                newArray[i] = elements[i];
            } else {
                newArray[i] = elements[i + 1];
            }
        }

        elements = newArray;

    }

    /**
     * @param index   指定位置
     * @param element 目标元素
     * @description 替换指定位置元素
     * @author fog
     * @date 2021/7/21
     */
    public void set(int index, int element) {
        elements[index] = element;
    }

    /**
     * @param target 搜索指定的元素
     * @return int
     * @description 搜索指定元素的下标
     * @author fog
     * @date 2021/7/21
     */
    public int search(int target) {

        int index = -1;

        for (int i = 0; i < elements.length; i++) {
            if (elements[i] == target) {
                index = i;
                break;
            }
        }

        return index;
    }
}
